//class Solution {
//public:
//    int search(vector<int>& nums, int target) {
//        int left = 0, right = nums.size() - 1;
//        while (left <= right)
//        {
//            int mid = (left + right) >> 1;
//            if (nums[mid] > target) right = mid - 1;
//            else if (nums[mid] < target) left = mid + 1;
//            else return mid;
//        }
//        return -1;
//    }
//};



//class Solution {
//public:
//    int removeElement(vector<int>& nums, int val) {
//        int pos = -1, n = nums.size();
//        for (int i = 0; i < n; i++)
//        {
//            if (nums[i] != val)
//                nums[++pos] = nums[i];
//        }
//        return pos + 1;
//    }
//};



//class Solution {
//public:
//    int minSubArrayLen(int target, vector<int>& nums) {
//        int ret = INT_MAX;
//        for (int left = 0, right = 0, sum = 0; right < nums.size(); right++)
//        {
//            sum += nums[right];
//            while (sum >= target)
//            {
//                ret = min(ret, right - left + 1);
//                sum -= nums[left++];
//            }
//        }
//        return (ret == INT_MAX) ? 0 : ret;
//    }
//};


//class Solution {
//public:
//    vector<vector<int>> generateMatrix(int n) {
//        int left = 0, right = n - 1, top = 0, bottom = n - 1;
//        vector<vector<int>> ret(n, vector<int>(n));
//        int ans = 1;
//        while (left <= right && top <= bottom)
//        {
//            for (int i = left; i <= right; i++)
//                ret[top][i] = ans++;
//            for (int i = top + 1; i < bottom; i++)
//                ret[i][right] = ans++;
//            if (top < bottom)
//            {
//                for (int i = right; i > left; i--)
//                    ret[bottom][i] = ans++;
//                for (int i = bottom; i > top; i--)
//                    ret[i][left] = ans++;
//            }
//            left++, right--, top++, bottom--;
//        }
//        return ret;
//    }
//};



